﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using PuntoMascotasWeb.BackEnd.BE;
using PuntoMascotasWeb.BackEnd.BC;
using PuntoMascotasWeb.WebSite.Includes.Clases;
using PuntoMascotasWeb.WebSite.Includes.Funciones;

namespace PuntoMascotasWeb.WebSite.Aplicacion.ABM
{
  public partial class abmClientes : PuntoMascotasWeb.WebSite.Includes.Funciones.Funciones
  {
    #region "Eventos"
    protected void Page_Load(object sender, EventArgs e)
    {
      try
      {
        if (!Page.IsPostBack)
        {
          //Carga la pagina por primera vez
          CargarCombos();
          HabilitarControles(false);
          btnNuevo.Enabled = true;
          btnEliminar.Enabled = false;
          btnEditar.Enabled = false;
          btnGuardar.Enabled = false;
          btnCancelar.Enabled = false;
          btnMascotas.Enabled = false;

          ViewState["ViewMascota"] = false;

          if (Session["Usuario"] != null)
          {
            ViewState["Usuario"] = Session["Usuario"];
            ViewState["Modo"] = Constantes.Modo.Nada;

            if ((Usuario.Usuarios)ViewState["Usuario"] != Usuario.Usuarios.Anonimo && (Usuario.Usuarios)ViewState["Usuario"] != Usuario.Usuarios.Invalido)
            {
              EjecutarScriptFinal("MostrarDiv('divListadoClientes','true');");
              CargarGrilla();
            }
            else
            {
              EjecutarScriptFinal("MostrarDiv('divListadoClientes','false');");


              if (Request["Usuario"] == "new" && (Usuario.Usuarios)ViewState["Usuario"] == Usuario.Usuarios.Invalido)
              {
                Nuevo();
              }
              else if (Request["Usuario"] == "edit" && (Usuario.Usuarios)ViewState["Usuario"] == Usuario.Usuarios.Anonimo)
              {

              }
              else
              {
                //salir.
              }

            }
          }

        }
        else
        {
          //refresca la pagina
            if ((Boolean)ViewState["ViewMascota"] == true)
            {
                EjecutarScriptFinal("MostrarDiv('divMascotas','true');");
                EjecutarScriptFinal("MostrarDiv('divBotoneraMascota','true');");
            }
        }
      }
      catch (Exception ex)
      {
        ProcesarExcepciones(ex);
      }
    }

    protected void btnNuevo_Click(object sender, EventArgs e)
    {
      try
      {
        Nuevo();

      }
      catch (Exception ex)
      {
        ProcesarExcepciones(ex);
      }
    }

    protected void btnEditar_Click(object sender, EventArgs e)
    {
      try
      {
        HabilitarControles(true);

        btnNuevo.Enabled = false;
        btnEliminar.Enabled = false;
        btnEditar.Enabled = false;
        btnGuardar.Enabled = true;
        btnCancelar.Enabled = true;
        btnMascotas.Enabled = false;
        dgvClientes.Enabled = false;


        lblConfirmarContraseña.Visible = true;
        lblContraseña.Visible = true;
        txtConfirmarContraseña.Visible = true;
        txtContraseña.Visible = true;

        txtNombre.Focus();
        ViewState["Modo"] = Constantes.Modo.Editar;
      }
      catch (Exception ex)
      {
        ProcesarExcepciones(ex);
      }
    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
     
      ClientesBE woClientesBE;
      Boolean wbRetornaMenu = false;

      try
      {

        woClientesBE = new ClientesBE();

        //ValidarDatos();

        woClientesBE.Apellido = txtApellido.Text.Trim();
        woClientesBE.Borrado = "N";
        woClientesBE.Direccion = txtDireccion.Text.Trim();
        woClientesBE.Email = txtEmail.Text.Trim();
        woClientesBE.IdTipoDoc = Convert.ToInt32(cmbTipoDoc.SelectedValue);
        woClientesBE.Nombre = txtNombre.Text.Trim();
        woClientesBE.NumDoc = Convert.ToInt32(txtNumDoc.Text.Trim());
        woClientesBE.Sexo = Convert.ToInt32(cmbSexo.SelectedValue) == 1 ? "M" : "F";
        woClientesBE.Telefono = Convert.ToDecimal(txtTelefono.Text.Trim());
        woClientesBE.Contraseña = txtContraseña.Text;
        woClientesBE.Usuario = txtUsuario.Text;
        woClientesBE.IdRol = (Int32)Usuario.Usuarios.Anonimo;

        if ((Constantes.Modo)ViewState["Modo"] == Constantes.Modo.Nuevo)
        {
          ClientesBC.Insert(woClientesBE);
          txtId.Text = woClientesBE.Id.ToString();
          ShowMessage("Cliente registrado con éxito!");
        }
        else if ((Constantes.Modo)ViewState["Modo"] == Constantes.Modo.Editar)
        {
          woClientesBE.Id = Convert.ToInt32(txtId.Text);
          ClientesBC.Update(woClientesBE);
          ShowMessage("Cliente actualizado con éxito!");
        }

        btnNuevo.Enabled = true;
        btnEliminar.Enabled = true;
        btnEditar.Enabled = true;
        btnMascotas.Enabled = true;
        btnGuardar.Enabled = false;
        btnCancelar.Enabled = false;
        HabilitarControles(false);

        lblConfirmarContraseña.Visible = false;
        lblContraseña.Visible = false;
        txtConfirmarContraseña.Visible = false;
        txtContraseña.Visible = false;
        txtUsuario.Visible = false;
        lblUsuario.Visible = false;

        dgvClientes.Enabled = true;

        if (Request["Usuario"] == "new" && (Usuario.Usuarios)ViewState["Usuario"] == Usuario.Usuarios.Invalido)
        {
          Session["Usuario"] = Usuario.Usuarios.Anonimo;
          Session["UsuarioDescripcion"] = txtUsuario.Text;
         
          wbRetornaMenu = true;
        }
        else if (Request["Usuario"] == "edit" && (Usuario.Usuarios)ViewState["Usuario"] == Usuario.Usuarios.Anonimo)
        {

          wbRetornaMenu = true;
        }
        else
        {

          CargarGrilla();

          if ((Constantes.Modo)ViewState["Modo"] == Constantes.Modo.Nuevo)
          {
            SeleccionarRegistroGrilla(dgvClientes.Rows.Count - 1);
          }
          else if ((Constantes.Modo)ViewState["Modo"] == Constantes.Modo.Editar)
          {
            SeleccionarRegistroGrilla((Int32)ViewState["Index"]);
          }

        }

        ViewState["Modo"] = Constantes.Modo.Nada;

      }
      catch (Exception ex)
      {
        ProcesarExcepciones(ex);
      }

      if (wbRetornaMenu) 
      {
        Response.Redirect("../Login/Menu.aspx");
      }

    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
      try
      {
        HabilitarControles(false);
        ViewState["Modo"] = Constantes.Modo.Nada;

        btnNuevo.Enabled = true;
        btnEliminar.Enabled = true;
        btnEditar.Enabled = true;
        btnMascotas.Enabled = true;
        btnGuardar.Enabled = false;
        btnCancelar.Enabled = false;
        HabilitarControles(false);

        lblConfirmarContraseña.Visible = false;
        lblContraseña.Visible = false;
        txtConfirmarContraseña.Visible = false;
        txtContraseña.Visible = false;
        txtUsuario.Visible = false;
        lblUsuario.Visible = false;

        dgvClientes.Enabled = true;

        CargarGrilla();

        if (ViewState["Index"] != null)
        {
          SeleccionarRegistroGrilla((Int32)ViewState["Index"]);
        }
        else
        {
          txtApellido.Text = String.Empty;
          txtConfirmarContraseña.Text = String.Empty;
          txtContraseña.Text = String.Empty;
          txtDireccion.Text = String.Empty;
          txtEmail.Text = String.Empty;
          txtId.Text = String.Empty;
          txtNombre.Text = String.Empty;
          txtNumDoc.Text = String.Empty;
          txtTelefono.Text = String.Empty;
          cmbSexo.SelectedIndex = -1;
          cmbTipoDoc.SelectedIndex = -1;
        }


      }
      catch (Exception ex)
      {
        ProcesarExcepciones(ex);
      }
    }

    protected void dgvClientes_RowDataBound(object sender, GridViewRowEventArgs e)
    {
      try
      {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
          e.Row.Attributes["OnClick"] = Page.ClientScript.GetPostBackClientHyperlink(dgvClientes, "Select$" + e.Row.RowIndex.ToString());
        }
      }
      catch (Exception ex)
      {
        ProcesarExcepciones(ex);
      }

    }

    protected void dgvClientes_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
      try
      {
        dgvClientes.Focus();

        if ((Constantes.Modo)ViewState["Modo"] != Constantes.Modo.Editar)
        {
          ViewState["Index"] = e.NewSelectedIndex;

          if ((Constantes.Modo)ViewState["Modo"] == Constantes.Modo.Nada)
          {
            btnEditar.Enabled = true;
            btnEliminar.Enabled = true;
            btnMascotas.Enabled = true;

            EjecutarScriptFinal("MostrarDiv('divMascotas','false');");
            EjecutarScriptFinal("MostrarDiv('divBotoneraMascota','false');");

          }

        }

        if (dgvClientes.Enabled == true)
        {
          SeleccionarRegistroGrilla(e.NewSelectedIndex);
        }
      }
      catch (Exception ex)
      {
        ProcesarExcepciones(ex);
      }

    }

    protected void btnEliminar_Click(object sender, EventArgs e)
    {
      try
      {

        if (txtId.Text == String.Empty)
        {
          ShowMessage("Debe seleccionar un Cliente para eliminar!");
        }
        else
        {
          ClientesBC.Delete(Convert.ToInt32(txtId.Text));

          txtApellido.Text = String.Empty;
          txtConfirmarContraseña.Text = String.Empty;
          txtContraseña.Text = String.Empty;
          txtDireccion.Text = String.Empty;
          txtEmail.Text = String.Empty;
          txtId.Text = String.Empty;
          txtNombre.Text = String.Empty;
          txtNumDoc.Text = String.Empty;
          txtTelefono.Text = String.Empty;
          cmbSexo.SelectedIndex = -1;
          cmbTipoDoc.SelectedIndex = -1;

          ShowMessage("Cliente eliminado con éxito!");

          CargarGrilla();

          btnEditar.Enabled = false;
          btnEliminar.Enabled = false;
          btnMascotas.Enabled = false;



        }

      }
      catch (Exception ex)
      {
        ProcesarExcepciones(ex);
      }
    }

    protected void btnMascotas_Click(object sender, EventArgs e)
    {
      Int32 wiIdPropietario;

      try
      {

        if (txtId.Text == String.Empty)
        {
          ShowMessage("Debe seleccionar un Cliente primero!");
        }
        else
        {
            if ((Boolean)ViewState["ViewMascota"] == false)
            {
                wiIdPropietario = Convert.ToInt32(txtId.Text);

                EjecutarScriptFinal("MostrarDiv('divMascotas','true');");
                EjecutarScriptFinal("MostrarDiv('divBotoneraMascota','true');");
                ViewState["ViewMascota"] = true;
                CargarMascota(wiIdPropietario);
            }
            else 
            {
                EjecutarScriptFinal("MostrarDiv('divMascotas','false');");
                EjecutarScriptFinal("MostrarDiv('divBotoneraMascota','false');");
                ViewState["ViewMascota"] = false;
            }

        }

        txtId.Focus();

      }
      catch (Exception ex)
      {
        ProcesarExcepciones(ex);
      }
    }

    protected void gvMascotas_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
      try
      {
        gvMascotas.Focus();

        if ((Constantes.Modo)ViewState["Modo"] != Constantes.Modo.Editar)
        {
          ViewState["IndexMascota"] = e.NewSelectedIndex;

          if ((Constantes.Modo)ViewState["Modo"] == Constantes.Modo.Nada)
          {
            btnEditarMascota.Enabled = true;
            btnEliminarMascota.Enabled = true;
          }

        }

        if (gvMascotas.Enabled == true)
        {
          SeleccionarRegistroGrillaMascotas(e.NewSelectedIndex);
        }
      }
      catch (Exception ex)
      {
        ProcesarExcepciones(ex);
      }
    }

    protected void gvMascotas_RowDataBound(object sender, GridViewRowEventArgs e)
    {
      try
      {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
          e.Row.Attributes["OnClick"] = Page.ClientScript.GetPostBackClientHyperlink(gvMascotas, "Select$" + e.Row.RowIndex.ToString());
        }
      }
      catch (Exception ex)
      {
        ProcesarExcepciones(ex);
      }
    }

    #endregion

    #region "Metodos"

    private void Nuevo()
    {
      try
      {
        HabilitarControles(true);

        btnNuevo.Enabled = false;
        btnEliminar.Enabled = false;
        btnEditar.Enabled = false;
        btnGuardar.Enabled = true;
        btnCancelar.Enabled = true;
        btnMascotas.Enabled = false;
        dgvClientes.Enabled = false;

        lblConfirmarContraseña.Visible = true;
        lblContraseña.Visible = true;
        txtConfirmarContraseña.Visible = true;
        txtContraseña.Visible = true;
        txtUsuario.Visible = true;
        lblUsuario.Visible = true;

        txtApellido.Text = String.Empty;
        txtConfirmarContraseña.Text = String.Empty;
        txtContraseña.Text = String.Empty;
        txtDireccion.Text = String.Empty;
        txtEmail.Text = String.Empty;
        txtId.Text = String.Empty;
        txtNombre.Text = String.Empty;
        txtNumDoc.Text = String.Empty;
        txtTelefono.Text = String.Empty;
        cmbSexo.SelectedIndex = -1;
        cmbTipoDoc.SelectedIndex = -1;

        ViewState["ViewMascota"] = false;
        EjecutarScriptFinal("MostrarDiv('divMascotas','false');");
        EjecutarScriptFinal("MostrarDiv('divBotoneraMascota','false');");

        txtNombre.Focus();
        ViewState["Modo"] = Constantes.Modo.Nuevo;
      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

    private void HabilitarControles(Boolean pbEstado)
    {
      txtApellido.ReadOnly = !pbEstado;
      txtDireccion.ReadOnly = !pbEstado;
      txtEmail.ReadOnly = !pbEstado;
      txtNombre.ReadOnly = !pbEstado;
      txtNumDoc.ReadOnly = !pbEstado;
      txtTelefono.ReadOnly = !pbEstado;
      txtContraseña.ReadOnly = !pbEstado;
      txtConfirmarContraseña.ReadOnly = !pbEstado;
      txtUsuario.ReadOnly = !pbEstado;
      cmbSexo.Enabled = pbEstado;
      cmbTipoDoc.Enabled = pbEstado;
    }

    private void HabilitarControlesMascota(Boolean pbEstado)
    {
        txtEdad.ReadOnly = !pbEstado;
        txtNombreMascota.ReadOnly = !pbEstado;
        cmbTamaño.Enabled = pbEstado;
        cmbSexoMascota.Enabled = pbEstado;
        cmbRaza.Enabled = pbEstado;
    }

    private void CargarGrilla()
    {
      ClientesBE woClientesBE;
      DataSet woDs;

      try
      {
        woClientesBE = new ClientesBE();
        woClientesBE.Borrado = "N";
        woDs = ClientesBC.GetByParam(woClientesBE);

        if (woDs != null)
        {
          if (woDs.Tables.Count > 0)
          {
            dgvClientes.DataSource = woDs.Tables[0];
            dgvClientes.DataBind();
            return;
          }
        }

        dgvClientes.DataSource = null;

      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

    private void CargarGrillaMascota(Int32 piIdPropietario)
    {
      MascotasBE woMascotasBE;
      DataSet woDs;

      try
      {
        woMascotasBE = new MascotasBE();
        woMascotasBE.Borrado = "N";
        woMascotasBE.IdPropietario =piIdPropietario;
        woDs = MascotasBC.GetByParam(woMascotasBE);

        if (woDs != null)
        {
          if (woDs.Tables.Count > 0)
          {
            gvMascotas.DataSource = woDs.Tables[0];
            gvMascotas.DataBind();
            return;
          }
        }

        gvMascotas.DataSource = null;

      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

    private void CargarMascota(Int32 piIdPropietario) 
    {
        HabilitarControlesMascota(false);
        btnNuevoMascota.Enabled = true;
        btnEditarMascota.Enabled = false;
        btnEliminarMascota.Enabled = false;
        btnGuardarMascota.Enabled = false;
        btnCancelarMascota.Enabled = false;

        txtIdMascota.Text = String.Empty;
        txtNombreMascota.Text = String.Empty;
        txtEdad.Text = String.Empty;
        cmbRaza.SelectedIndex = -1;
        cmbSexoMascota.SelectedIndex = -1;
        cmbTamaño.SelectedIndex = -1;

        EjecutarScriptFinal("MostrarDiv('divMascotas','true');");
        EjecutarScriptFinal("MostrarDiv('divBotoneraMascota','true');");

      CargarGrillaMascota(piIdPropietario);
    }

    //Carga los combos de la interfaz
    private void CargarCombos()
    {
      try
      {
        CargarComboTipoDoc();
        CargarComboSexo();
        CargarComboRaza();
        CargarComboTamaño();
        CargarComboSexoMascota();

      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

    private void CargarComboTipoDoc()
    {
      DataSet woDs;
      DataRow woDr;

      try
      {

        woDs = TipoDocumentoBC.GetAll();

        if (woDs != null)
        {
          if (woDs.Tables.Count > 0)
          {
            woDr = woDs.Tables[0].NewRow();
            woDr["IdTipoDoc"] = 0;
            woDr["Descripcion"] = "Seleccione un Tipo de Documento...";
            woDs.Tables[0].Rows.InsertAt(woDr, 0);

            cmbTipoDoc.Items.Clear();
            cmbTipoDoc.DataSource = woDs.Tables[0];
            cmbTipoDoc.DataTextField = "Descripcion";
            cmbTipoDoc.DataValueField = "IdTipoDoc";
            cmbTipoDoc.DataBind();
          }
        }

      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

    private void CargarComboSexo()
    {
      DataSet woDs;
      DataRow woDr;

      try
      {

        woDs = new DataSet();
        woDs.Tables.Add();
        woDs.Tables[0].Columns.Add("IdSexo");
        woDs.Tables[0].Columns.Add("Descripcion");

        if (woDs != null)
        {
          if (woDs.Tables.Count > 0)
          {
            woDr = woDs.Tables[0].NewRow();
            woDr["IdSexo"] = 0;
            woDr["Descripcion"] = "Seleccione el Sexo...";
            woDs.Tables[0].Rows.InsertAt(woDr, 0);

            woDr = woDs.Tables[0].NewRow();
            woDr["IdSexo"] = 1;
            woDr["Descripcion"] = "Masculino";
            woDs.Tables[0].Rows.InsertAt(woDr, 1);

            woDr = woDs.Tables[0].NewRow();
            woDr["IdSexo"] = 2;
            woDr["Descripcion"] = "Femenino";
            woDs.Tables[0].Rows.InsertAt(woDr, 2);

            this.cmbSexo.Items.Clear();
            cmbSexo.DataSource = woDs.Tables[0];
            cmbSexo.DataTextField = "Descripcion";
            cmbSexo.DataValueField = "IdSexo";
            cmbSexo.DataBind();
          }
        }

      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

    private void CargarComboRaza()
    {
      DataSet woDs;
      DataRow woDr;
      RazasBE woRazasBE;

      try
      {
        woRazasBE = new RazasBE();
        woRazasBE.Borrado = "N";
        woDs = RazasBC.GetByParam(woRazasBE);

        if (woDs != null)
        {
          if (woDs.Tables.Count > 0)
          {
            woDr = woDs.Tables[0].NewRow();
            woDr["IdRaza"] = 0;
            woDr["Descripcion"] = "Seleccione una Raza...";
            woDs.Tables[0].Rows.InsertAt(woDr, 0);

            cmbRaza.Items.Clear();
            cmbRaza.DataSource = woDs.Tables[0];
            cmbRaza.DataTextField = "Descripcion";
            cmbRaza.DataValueField = "IdRaza";
            cmbRaza.DataBind();
          }
        }

      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

    private void CargarComboTamaño()
    {
      DataSet woDs;
      DataRow woDr;
      TamañosBE woTamañosBE;

      try
      {
        woTamañosBE = new TamañosBE();
        woTamañosBE.Borrado = "N";
        woDs = TamañosBC.GetByParam(woTamañosBE);

        if (woDs != null)
        {
          if (woDs.Tables.Count > 0)
          {
            woDr = woDs.Tables[0].NewRow();
            woDr["IdTamaño"] = 0;
            woDr["Descripcion"] = "Seleccione un Tamaño...";
            woDs.Tables[0].Rows.InsertAt(woDr, 0);

            this.cmbTamaño.Items.Clear();
            cmbTamaño.DataSource = woDs.Tables[0];
            cmbTamaño.DataTextField = "Descripcion";
            cmbTamaño.DataValueField = "IdTamaño";
            cmbTamaño.DataBind();
          }
        }

      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

    private void CargarComboSexoMascota()
    {
      DataSet woDs;
      DataRow woDr;

      try
      {

        woDs = new DataSet();
        woDs.Tables.Add();
        woDs.Tables[0].Columns.Add("IdSexo");
        woDs.Tables[0].Columns.Add("Descripcion");

        if (woDs != null)
        {
          if (woDs.Tables.Count > 0)
          {
            woDr = woDs.Tables[0].NewRow();
            woDr["IdSexo"] = 0;
            woDr["Descripcion"] = "Seleccione el Sexo...";
            woDs.Tables[0].Rows.InsertAt(woDr, 0);

            woDr = woDs.Tables[0].NewRow();
            woDr["IdSexo"] = 1;
            woDr["Descripcion"] = "Macho";
            woDs.Tables[0].Rows.InsertAt(woDr, 1);

            woDr = woDs.Tables[0].NewRow();
            woDr["IdSexo"] = 2;
            woDr["Descripcion"] = "Hembra";
            woDs.Tables[0].Rows.InsertAt(woDr, 2);

            this.cmbSexoMascota.Items.Clear();
            cmbSexoMascota.DataSource = woDs.Tables[0];
            cmbSexoMascota.DataTextField = "Descripcion";
            cmbSexoMascota.DataValueField = "IdSexo";
            cmbSexoMascota.DataBind();
          }
        }

      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

    private void SeleccionarRegistroGrilla(Int32 piIndex)
    {
      try
      {
        this.txtApellido.Text = dgvClientes.Rows[piIndex].Cells[2].Text;
        this.txtDireccion.Text = dgvClientes.Rows[piIndex].Cells[6].Text;
        this.txtEmail.Text = dgvClientes.Rows[piIndex].Cells[8].Text;
        this.txtId.Text = dgvClientes.Rows[piIndex].Cells[0].Text;
        this.txtNombre.Text = dgvClientes.Rows[piIndex].Cells[1].Text;
        this.txtNumDoc.Text = dgvClientes.Rows[piIndex].Cells[4].Text;
        this.txtTelefono.Text = dgvClientes.Rows[piIndex].Cells[7].Text;
        this.cmbSexo.Text = dgvClientes.Rows[piIndex].Cells[5].Text == "M" ? "1" : "2";
        this.cmbTipoDoc.Text = dgvClientes.DataKeys[piIndex][1].ToString();

        foreach (GridViewRow woDr in dgvClientes.Rows)
        {
          if (woDr.RowIndex == piIndex)
          {
            woDr.RowState = DataControlRowState.Selected;
          }
          else
          {
            if (woDr.RowIndex % 2 == 0)
            {
              woDr.RowState = DataControlRowState.Normal;
            }
            else
            {
              woDr.RowState = DataControlRowState.Alternate;
            }
          }
        }

        if ((Boolean)ViewState["ViewMascota"] == true)
        {
            CargarMascota(Convert.ToInt32(txtId.Text));
        }

        dgvClientes.Focus();

      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

    private void SeleccionarRegistroGrillaMascotas(Int32 piIndex)
    {
      try
      {
        this.txtIdMascota.Text = gvMascotas.Rows[piIndex].Cells[0].Text;
        this.txtNombreMascota.Text = gvMascotas.Rows[piIndex].Cells[1].Text;
        this.cmbRaza.Text = gvMascotas.DataKeys[piIndex][1].ToString();
        this.cmbSexoMascota.Text = gvMascotas.Rows[piIndex].Cells[3].Text == "M" ? "1" : "2";
        this.cmbTamaño.Text = gvMascotas.DataKeys[piIndex][2].ToString();
        this.txtEdad.Text = gvMascotas.Rows[piIndex].Cells[5].Text;


        foreach (GridViewRow woDr in gvMascotas.Rows)
        {
          if (woDr.RowIndex == piIndex)
          {
            woDr.RowState = DataControlRowState.Selected;
          }
          else
          {
            if (woDr.RowIndex % 2 == 0)
            {
              woDr.RowState = DataControlRowState.Normal;
            }
            else
            {
              woDr.RowState = DataControlRowState.Alternate;
            }
          }
        }

        gvMascotas.Focus();

      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

    #endregion

    protected void btnNuevoMascota_Click(object sender, EventArgs e)
    {
        try
        {
            HabilitarControlesMascota(true);

            btnNuevoMascota.Enabled = false;
            btnEliminarMascota.Enabled = false;
            btnEditarMascota.Enabled = false;
            btnGuardarMascota.Enabled = true;
            btnCancelarMascota.Enabled = true;
            gvMascotas.Enabled = false;

            txtIdMascota.Text = String.Empty;
            txtNombreMascota.Text = String.Empty;
            txtEdad.Text = String.Empty;
            cmbRaza.SelectedIndex = -1;
            cmbSexoMascota.SelectedIndex = -1;
            cmbTamaño.SelectedIndex = -1;

            dgvClientes.Enabled = false;
            btnNuevo.Enabled = false;
            btnCancelar.Enabled = false;
            btnEliminar.Enabled = false;
            btnEditar.Enabled = false;
            btnGuardar.Enabled = false;
            btnMascotas.Enabled = false;

            txtNombreMascota.Focus();
            ViewState["Modo"] = Constantes.Modo.NuevoMascota;
        }
        catch (Exception ex)
        {
            ProcesarExcepciones(ex);
        }
    }

    protected void btnEditarMascota_Click(object sender, EventArgs e)
    {
        try
        {
            HabilitarControlesMascota(true);

            btnNuevoMascota.Enabled = false;
            btnEliminarMascota.Enabled = false;
            btnEditarMascota.Enabled = false;
            btnGuardarMascota.Enabled = true;
            btnCancelarMascota.Enabled = true;
            gvMascotas.Enabled = false;

            dgvClientes.Enabled = false;
            btnNuevo.Enabled = false;
            btnCancelar.Enabled = false;
            btnEliminar.Enabled = false;
            btnEditar.Enabled = false;
            btnGuardar.Enabled = false;
            btnMascotas.Enabled = false;

            txtNombreMascota.Focus();
            ViewState["Modo"] = Constantes.Modo.EditarMascota;
        }
        catch (Exception ex)
        {
            ProcesarExcepciones(ex);
        }
    }

    protected void btnEliminarMascota_Click(object sender, EventArgs e)
    {
        try
        {

            if (txtIdMascota.Text == String.Empty)
            {
                ShowMessage("Debe seleccionar una Mascota para eliminar!");
                gvMascotas.Focus();
            }
            else
            {
                MascotasBC.Delete(Convert.ToInt32(txtIdMascota.Text));

                txtIdMascota.Text = String.Empty;
                txtNombreMascota.Text = String.Empty;
                txtEdad.Text = String.Empty;
                cmbRaza.SelectedIndex = -1;
                cmbSexoMascota.SelectedIndex = -1;
                cmbTamaño.SelectedIndex = -1;

                ShowMessage("Mascota eliminada con éxito!");

                CargarGrillaMascota(Convert.ToInt32(txtId.Text));

                btnEditarMascota.Enabled = false;
                btnEliminarMascota.Enabled = false;

            }

        }
        catch (Exception ex)
        {
            ProcesarExcepciones(ex);
        }
    }

    protected void btnGuardarMascota_Click(object sender, EventArgs e)
    {
        MascotasBE woMascotasBE;

        try
        {

            woMascotasBE = new MascotasBE();

            //ValidarDatos();

            woMascotasBE.IdPropietario = Convert.ToInt32(txtId.Text);
            woMascotasBE.Edad = txtEdad.Text.Trim();
            woMascotasBE.Borrado = "N";
            woMascotasBE.IdRaza = Convert.ToInt32(cmbRaza.SelectedValue);
            woMascotasBE.IdTamaño = Convert.ToInt32(cmbTamaño.SelectedValue);
            woMascotasBE.Nombre = txtNombreMascota.Text.Trim();
            woMascotasBE.Sexo = Convert.ToInt32(cmbSexoMascota.SelectedValue) == 1 ? "M" : "H";

            if ((Constantes.Modo)ViewState["Modo"] == Constantes.Modo.NuevoMascota)
            {
                MascotasBC.Insert(woMascotasBE);
                txtIdMascota.Text = woMascotasBE.Id.ToString();
                ShowMessage("Mascota registrada con éxito!");
            }
            else if ((Constantes.Modo)ViewState["Modo"] == Constantes.Modo.EditarMascota)
            {
                woMascotasBE.Id = Convert.ToInt32(txtIdMascota.Text);
                MascotasBC.Update(woMascotasBE);
                ShowMessage("Mascota actualizada con éxito!");
            }

            btnNuevoMascota.Enabled = true;
            btnEliminarMascota.Enabled = true;
            btnEditarMascota.Enabled = true;
            btnGuardarMascota.Enabled = false;
            btnCancelarMascota.Enabled = false;
            HabilitarControlesMascota(false);

            gvMascotas.Enabled = true;

            CargarGrillaMascota(Convert.ToInt32(txtId.Text));

            if ((Constantes.Modo)ViewState["Modo"] == Constantes.Modo.NuevoMascota)
            {
                SeleccionarRegistroGrillaMascotas(gvMascotas.Rows.Count - 1);
            }
            else if ((Constantes.Modo)ViewState["Modo"] == Constantes.Modo.EditarMascota)
            {
                SeleccionarRegistroGrillaMascotas((Int32)ViewState["IndexMascota"]);
            }

            ViewState["Modo"] = Constantes.Modo.Nada;
            dgvClientes.Enabled = true;
            btnNuevo.Enabled = true;
            btnEditar.Enabled = true;
            btnEliminar.Enabled = true;
            btnMascotas.Enabled = true;
            

        }
        catch (Exception ex)
        {
            ProcesarExcepciones(ex);
        }
    }

    protected void btnCancelarMascota_Click(object sender, EventArgs e)
    {
        dgvClientes.Enabled = true;
        btnNuevo.Enabled = true;
        btnEditar.Enabled = true;
        btnEliminar.Enabled = true;
        btnMascotas.Enabled = true;

        try
        {
            HabilitarControlesMascota(false);
            ViewState["Modo"] = Constantes.Modo.Nada;

            btnNuevoMascota.Enabled = true;
            btnEliminarMascota.Enabled = true;
            btnEditarMascota.Enabled = true;
            btnGuardarMascota.Enabled = false;
            btnCancelarMascota.Enabled = false;
            HabilitarControlesMascota(false);

            gvMascotas.Enabled = true;

            CargarGrillaMascota(Convert.ToInt32(txtId.Text));

            if (ViewState["IndexMascota"] != null)
            {
                SeleccionarRegistroGrillaMascotas((Int32)ViewState["IndexMascota"]);
            }
            else
            {
                txtIdMascota.Text = String.Empty;
                txtNombreMascota.Text = String.Empty;
                txtEdad.Text = String.Empty;
                cmbRaza.SelectedIndex = -1;
                cmbSexoMascota.SelectedIndex = -1;
                cmbTamaño.SelectedIndex = -1;
            }


        }
        catch (Exception ex)
        {
            ProcesarExcepciones(ex);
        }

    }












  }
}